package com.qidian.service.impl;

import com.qidian.pojo.QdPost;
import com.qidian.mapper.QdPostMapper;
import com.qidian.service.QdPostService;
import com.qidian.util.LayuiDataList;
import com.qidian.util.QidianResponse;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.xml.crypto.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

/**
 * (QdPost表)服务实现类
 *
 * @author 戴着假发的程序员
 * @since 2022-02-27 11:05:06
 */
@Service("qdPostService")
public class QdPostServiceImpl implements QdPostService {
    @Resource
    private QdPostMapper qdPostMapper;

    /**
     * 通过ID查询单条数据
     *
     * @param postId 主键
     * @return QidianResponse
     */
    @Override
    public QidianResponse selectById(Long postId) {
        QidianResponse response = new QidianResponse();
        QdPost p = this.qdPostMapper.selectById(postId);
        if(p!=null){
            response.setCode(200);
            response.setData(p);
        }else{
            response.setCode(404);
        }
        return response;
    }

    /**
     * 分页查询
     *
     * @param page 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    @Override
    public List<QdPost> selectPage(int page, int limit) {
        int start = (page-1)*limit;
        return this.qdPostMapper.selectPage(start, limit);
    }
    /**
     * 分页查询
     *
     * @param page 查询起始位置
     * @param limit 查询条数
     * @param qdPost 实例对象
     * @return 对象列表
     */
    public List<QdPost> selectPage(int page, int limit,QdPost qdPost){
        int start = (page-1)*limit;
        return this.qdPostMapper.selectPageByQdPost(start, limit,qdPost);
    }
    /**
     * 查询所有
     * @return QidianResponse
     */
     @Override
     public QidianResponse selectAll() {
         QidianResponse response = new QidianResponse();
         response.setCode(200);
         response.setData(qdPostMapper.selectAll());
         return response;
     }
     
    /**
     * 根据条件查询
     *
     * @return 实例对象的集合
     */
    @Override
    public List<QdPost> selectList(QdPost qdPost) {
        return this.qdPostMapper.selectList(qdPost);
    }
    
    /**
     * 新增数据
     *
     * @param qdPost 实例对象
     * @return 实例对象
     */
    @Override
    public QidianResponse insert(QdPost qdPost) {
        QidianResponse response = new QidianResponse();
        response.setCode(500);
        // 查重
        if(qdPostMapper.selectByName(qdPost.getPostName())!=null){
            response.setCode(501);
            return response;
        }
        // 保存
        // 补全数据
        Date  date = new Date();
        qdPost.setPostCreateTime(date);
        qdPost.setPostModifyTime(date);
        qdPost.setPostStatus(1);
        if(this.qdPostMapper.insert(qdPost)==1){
            response.setCode(200);
        }
        return response;
    }

    /**
     * 批量新增
     *
     * @param qdPosts 实例对象的集合
     * @return 生效的条数
     */
    @Override
    public int batchInsert(List<QdPost> qdPosts) {
        return this.qdPostMapper.batchInsert(qdPosts);
    }

    /**
     * 修改数据
     *
     * @param qdPost 实例对象
     * @return 实例对象
     */
    @Override
    public QidianResponse update(QdPost qdPost) {
        QidianResponse response = new QidianResponse();
        response.setCode(500);
        // 查重
        QdPost post = qdPostMapper.selectByName(qdPost.getPostName());
        if(!post.getPostId().equals(qdPost.getPostId())){
            response.setCode(501);
            return response;
        }
        // 补全数据
        qdPost.setPostModifyTime(new Date());
        // 保存
        if(this.qdPostMapper.update(qdPost)==1){
            response.setCode(200);
            response.setData(qdPost);
        }
        return response;
    }

    /**
     * 通过主键删除数据
     *
     * @param postId 主键
     * @return 是否成功
     */
    @Override
    public int deleteById(Long postId) {
        return this.qdPostMapper.deleteById(postId);
    }

    /**
     * 通过主键删除数据
     *
     * @param postId 主键
     * @return 是否成功
     */
    @Override
    public int deleteByIds(Long [] ids) {
        return this.qdPostMapper.deleteByIds(ids);
    }
    
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
     @Override
     public int count(){
        return this.qdPostMapper.count();
     }

     /**
     * 查询总数据数
     *
     * @return 数据总数
     */
    public int countByQdPost(QdPost qdPost){
        return this.qdPostMapper.countByQdPost(qdPost);
    }

                /**
     * 分页查询1
     *
     * @param page 页码
     * @param limit 查询条数
     * @param postName
     * @return Map
     */
    public LayuiDataList<QdPost> selectPageForLayui(int page, int limit, String postName){
        LayuiDataList<QdPost> dataList = new LayuiDataList<>();
        dataList.setCode(0);
        dataList.setMsg("");
        dataList.setCount(qdPostMapper.selectCountByPageAndName(postName));
        dataList.setData(qdPostMapper.selectByPageAndName((page-1)*limit,limit,postName));
        return dataList;
    };
}